package com.jsbs.iam.auth.service;

import com.github.pagehelper.PageInfo;
import com.jsbs.iam.auth.dto.*;
import com.jsbs.iam.auth.param.IamQueryStaticUserGroupParam;
import com.jsbs.iam.auth.param.IamQueryStaticUserGroupUsersParam;
import com.jsbs.iam.auth.param.IamStaticUserGroupDeleteParam;
import com.jsbs.iam.auth.vo.IamUserGroupVo;
import com.jsbs.iam.auth.vo.IamUserInfoVo;
import com.jsbs.iam.auth.vo.MenuThreeVo;

import java.util.List;
import java.util.Set;

/**
 * @ClassName: UserGroupManagerService
 * @Author: tenghuawei
 * @Date: 2023/1/5 15:29
 * @Description:
 */

public interface IamStaticUserGroupManagerService {

    /**
     * 功能描述：新增静态用户组
     * @param iamStaticUserGroupAddDto
     * @return int
     */
    int createStaticUserGroup (IamStaticUserGroupAddDto iamStaticUserGroupAddDto);

    /**
     * 功能描述：查询用户组
     * @param iamQueryStaticUserGroupParam
     * @return PageInfo
     */
    PageInfo<IamUserGroupVo> queryUserGroup(IamQueryStaticUserGroupParam iamQueryStaticUserGroupParam);

    /**
     * 功能描述：编辑静态用户组
     * @param iamStaticUserGroupEditDto
     * @return int
     */
    int userGroupEdit(IamStaticUserGroupEditDto iamStaticUserGroupEditDto);

    /**
     * 功能描述：删除动、静态用户组
     * @param iamStaticUserGroupDeleteParam
     * @return
     */
    void userGroupDelete(IamStaticUserGroupDeleteParam iamStaticUserGroupDeleteParam);

    /**
     * 功能描述：选择一个静态用户组，查询用户（该静态用户组下的用户，分页展示）
     * @param iamQueryStaticUserGroupUsersParam
     * @return List
     */
    PageInfo<IamUserInfoVo> queryUserGroupUsers(IamQueryStaticUserGroupUsersParam iamQueryStaticUserGroupUsersParam);

    /**
     * 功能描述：某个静态用户组下可以新增的用户（分页展示）
     * @param
     * @return PageInfo<IamUserInfoVo>
     */
    PageInfo<IamUserInfoVo> queryUserGroupNotUsers(IamQueryStaticUserGroupUsersParam iamQueryStaticUserGroupUsersParam);

    /**
     * 功能描述：某个静态用户组下新增用户
     * @param iamStaticUserGroupUsersAddDto
     * @return int
     */
    void userGroupUserAdd(IamStaticUserGroupUsersAddDto iamStaticUserGroupUsersAddDto);

    /**
     * 功能描述：某个静态用户组下移除用户
     * @param iamStaticUserGroupUsersRemoveDto
     * @return int
     */
    int userGroupUsersRemove(IamStaticUserGroupUsersRemoveDto iamStaticUserGroupUsersRemoveDto);

    /**
     * 功能描述：查询当前普管用户的1个应用类型下的权限范围内的应用的菜单（按钮）树
     * @param iamMenuManagerSelectDto
     * @return list
     */
    List<MenuThreeVo> getMenuThreeInfo( IamMenuManagerSelectDto iamMenuManagerSelectDto);

    /**
     * 功能描述：动、静态用户组权限编辑
     * @param
     * @return void
     */
    void  staticUserGroupPermissionEdit(IamStaticUserGroupUsersPermissionEditingDto iamStaticUserGroupUsersPermissionEditingDto);

    /**
     * 功能描述：获取某个静、动态用户组下某个菜单树下已经勾选的菜单或按钮，回填
     * @param iamMenuManagerAlreadySelectDto
     * @return List
     */
    Set<String> getAlreadyMenuThreeInfo(IamMenuManagerAlreadySelectDto iamMenuManagerAlreadySelectDto);

}
